package com.lagou;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;

/**
 * 使用单例模式优化jedis的连接池
 * @author 10843
 */
public class JedisPoolUtil {


    private JedisPoolUtil (){}

    private volatile static JedisPool jedisPool = null;

    private volatile static Jedis jedis = null;


    // 返回一个连接池
    private JedisPool getInstance(){
        // 双层检测锁
        if(jedisPool==null){
            synchronized (JedisSentinelPool.class){
                if(jedisPool==null){
                    JedisPoolConfig config = new JedisPoolConfig();
                    // 设置资源池允许的最大空闲连接数
                    config.setMaxIdle(30);
                    // 设置资源池允许的最大连接数
                    config.setMaxTotal(1000);
                    // 设置最大空闲等待时间
                    config.setMaxWaitMillis(60*1000);
                    // 设置在borrow的一个jedis实例时是否提前进行有效性检测
                    // 为true,保证得到的jedis都是有效的
                    config.setTestOnBorrow(true);
                    jedisPool = new JedisPool(config,"192.168.106.128",6379);
                }
            }
        }
        return jedisPool;
    }

    // 返回jedis对象
    public Jedis getJedis(){
        if(jedis==null){
            jedis = getInstance().getResource();
        }
        return jedis;
    }

}
